package com.example.tibetanmedicinechest.controller;


import com.example.tibetanmedicinechest.Exception.BusinessException;
import com.example.tibetanmedicinechest.Exception.SystemException;
import com.example.tibetanmedicinechest.model.Code;
import com.example.tibetanmedicinechest.model.Result;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 异常处理中心，使用了aop的思想，能够全面检测表现层出现的异常！！！
 */
@RestControllerAdvice//声明是一个异常处理中心
public class ProjectExceptionAdvice {
    /**
     * 处理系统异常
     * @param ex
     * @return
     */
    @ExceptionHandler(SystemException.class)//用来定义是用来处理哪一个异常的
    public Result doSystemException(SystemException ex){
        //记录日志
        //发送消息给运维
        //发送邮件给开发人员,ex对象发送给开发人员
        return new Result(ex.getCode(),ex.getMessage(),null);
    }

    /**
     * 处理业务异常
     * @param ex
     * @return
     */
    @ExceptionHandler(BusinessException.class)//用来定义是用来处理哪一个异常的
    public Result doBusinessException(BusinessException ex){
        return new Result(ex.getCode(),ex.getMessage(),null);
    }

    /**
     * 处理其他异常
     * @param ex
     * @return
     */
    @ExceptionHandler(Exception.class)//用来定义是用来处理哪一个异常的
    public Result doException(Exception ex){
        ex.printStackTrace();
        //记录日志
        //发送消息给运维
        //发送邮件给开发人员,ex对象发送给开发人员
        return new Result(Code.SYSTEM_UNKNOW_ERR,"系统繁忙请稍后再试",null);
    }
}
